# 1.使用不定长参数定义一个函数max_min，接受的参数类型是数值，最终返回这些数中的最大值和最小值
def max_min(*args):
    for i in args:
        if type(i)!=type(1):
            print("请传入数字类型参数")

    return "最大值是%d,最小值是%d" % (max(args),min(args))

print(max_min(1,2,"w",4,5))

# 2. 定义函数findall，要求返回符合要求的所有位置的起始下标，如字符串"helloworldhellopythonhelloc++hellojava"，
# # 需要找出里面所有的"hello"的位置，返回的格式是一个元组，即：(0,10,21,29)

def findall(finder,str1 = "helloworldhellopythonhelloc++hellojava"):
    str1 = str1
    list1 = []
    while True:
        degree = str1.count(finder) #判断该字符在字符串出现的次数
        if degree !=0:  # 如果出现了
            for i in range(0,degree):  # 遍历次数为出现的次数
                list1.append(str1.find(finder)) # 空元组中加入该位置的索引
                str1 = str1.replace(finder,"0" *len(finder),1)  # 用长度为finder长度的0替换finder 重新赋值给str1
                print(str1)
        return tuple(list1)

a = findall("hello","helloworldhellopythonhelloc++hellojava")
print(a)

# 3. 使用递归的方法打印出前n个斐波那契数列1,1,2,3,5,8,13....
def list1(num):
    if num ==0:
        return 0
    elif num ==1:
        return 1
    elif num ==2:
        return 1
    return list1(num-1)+list1(num-2)

print(list1(4))

# 4. 定义一个函数完成一个列表中元素的升序排列
def up(list1 = [1,3,4,1,100,6,7,9]):
    list1 = list1
    list2 = []
    while len(list1) != 0:
        a = min(list1)
        b = list1.count(a)
        for _ in range(0,b):  #计算这个最大值在列表中出现的次数
            list2.append(list1.pop(list1.index(a)))  # list2 增加list1删掉的最小值的一个数据
    print(list2)
    list1 = list2
    print(list1)
up()